package com.cskaoyan.javase.oop2._1extends._7initialization._2super;
/**
 * super关键字指向子类对象当中,父类成员的那片区域
 * 它近似的可以看成一个父类对象
 * 在子类的成员方法,构造代码块,构造器中都能够使用它们,实际使用上来说,
 *      就可以把当做出父类对象的引用去使用:
 *          1.可以用super点调用父类的成员方法,访问属性
 *              但是一般来说,没有特别大的意义
 *              只有在父子类成员同名时,可以用来做区分
 *              this也可以用于访问自身成员
 *              和super类似
 *          2.在构造器中,super可以调用父类构造器方法,这一点和this是类似的.
 *
 *          以上是它们两个相似的地方
 *          当然它们也是有区别的,最主要的是两点:
 *              1.this表示自身对象,当前对象,访问不受权限限制.但是super终极是父类的,所以它受访问权限限制.
 *              2.this确定肯定是一个引用,它确实指向一个子类对象,所以在方法中可以直接输出它,因为它就是一个引用,装的是对象的地址
 *              super终究不是一个引用,它指向的不是对象,而是对象中的一片区域,所以super是不能打印的
 *
 *
 * @since 15:49
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        Son s = new Son();
        s.testSon();
    }
}
class Father{
    int a = 10;
    public void test(){
        System.out.println("father");
    }
    public void testFather(){}
}
class Son extends Father{
   private int a = 100;
    {
    }
    public Son() {
        System.out.println("son");
    }

    public void test(){
    }

    public void testSon(){
        // System.out.println(super);
        System.out.println(a);
        test();
        System.out.println(super.a);
        super.test();
    }

    public void test2(int a){
        System.out.println(a);
        System.out.println(this.a);
        System.out.println(super.a);
    }

    public static void testStatic(){
        // System.out.println(this);
        // System.out.println(super);
    }
}